package com.zyx.xml.dom;

import javax.xml.parsers.*;
import java.io.*;

import cn.hutool.core.io.resource.ClassPathResource;
import org.w3c.dom.*;

/**
 * Description:
 * <br/>10.2.9 DOM和命名空间
 *
 * @author Yaxi.Zhang
 * @since 2022/9/25 10:24
 */
public class NamespaceParse {
    public static void main(String[] args) throws Exception {
        // DOM解析器工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 启用命名空间支持
        factory.setNamespaceAware(true);
        // 获取DOM解析器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 解析XML文档，并获取该XML文档对应的Document
        Document doc = builder.parse(new ClassPathResource("ch10_02/book3.xml").getFile());
        // 获得根节点的方法，getDocumentElement
        Element bookList = doc.getDocumentElement();
        // 获取元素根的命名空间信息
        System.out.println("根元素的本地名：" + bookList.getLocalName());
        System.out.println("根元素的命名空间的URI：" + bookList.getNamespaceURI());
        System.out.println("根元素的标签名：" + bookList.getNodeName());
        System.out.println("根元素的命名空间的短名前缀：" + bookList.getPrefix());
        // 获取根元素的所有属性
        NamedNodeMap attrs = bookList.getAttributes();
        // 遍历根元素的每个属性
        for (int i = 0; i < attrs.getLength(); i++) {
            System.out.println("-------------第" + i + "个属性的信息-------------");
            Attr attr = (Attr) attrs.item(i);
            System.out.println("根元素的第" + i + "个属性的本地名：" + attr.getLocalName());
            System.out.println("根元素的第" + i + "个属性的命名空间的URI：" + attr.getNamespaceURI());
            System.out.println("根元素的第" + i + "个属性的标签名：" + attr.getNodeName());
            System.out.println("根元素的第" + i + "个属性的命名空间的短名前缀：" + attr.getPrefix());
        }
    }
}
